#include "stdafx.h"
#include <vector>
#include <algorithm>
#include <iostream>
#include <string>

#include "Actions.h"

extern std::vector<std::function<void (void)>> loadFuncActions()
{
	// Define the Actions container
	std::vector<std::function<void (void)>> actions;

	// Load every action according the excute order
	// Welcome print
	actions.push_back(WelcomeAction);
	// Surface Action: overview of modern c plus plus
	actions.push_back(ShapeAction);
	// C++ Type System (Modern C++)
	actions.push_back(TypeConvertionSafeAction);
	// Smart Pointers
	actions.push_back(CheckStatusesAction);
	// PImp(Point to Implementation) in actions
	actions.push_back(PImplAction);
	actions.push_back(PImpSwapAction);
	// Lambda expressions
	actions.push_back(lambdaAction);
	actions.push_back(funcObjectAction);
	actions.push_back(lambdaProfileAction);
	actions.push_back(mutableTestAction);
	// Range-based for
	actions.push_back(RangForAction);
	// Container test actions
	actions.push_back(VectorAssignAction);
	// Smart ponters actions
	actions.push_back(UniquePtrPassAsValueAction);
	actions.push_back(UniquePtrVectorCopyAction);
	// Rvalues reference actions
	actions.push_back(RValueReferenceAction);
	actions.push_back(RvalueStackScopeAction);
	actions.push_back(RvalueWithSTLContainerAction);

	// Return this container with value, since it's safe and good efficiency, 
	// it's a move operation
	return actions;
}

extern std::vector<const Action> loadActions()
{
	// Define the Actions container
	std::vector<const Action> actions;

	// Load every action according the excute order
	// Welcome print
	actions.push_back(WelcomeAction);
	// Surface Action: overview of modern c plus plus
	actions.push_back(ShapeAction);
	// C++ Type System (Modern C++)
	actions.push_back(TypeConvertionSafeAction);
	// Smart Pointers
	actions.push_back(CheckStatusesAction);
	// PImp(Point to Implementation) in actions
	actions.push_back(PImplAction);

	// Return this container with value, since it's safe and good efficiency, 
	// it's a move operation
	return actions;
}


// References:
// http://msdn.microsoft.com/en-us/library/windows/apps/hh279654.aspx